<?php
/**************************************
 * View Class
 * Brainfucker.ru (c) Oleg Illarionov
 **************************************/
require_once engine.'/classes/file.class.php';
class view {	
	# содержание страницы
	var $content='';
	
	# название страницы
	var $title='';
	
	# директория с шаблоном относительно выполняемого скрипта
	var $dir='';
	
	# папка с исполняемомым файлом
	var $path='/';
	
	# путь к исполняемому файлу
	var $file='/index.php';
	
	# имя директории в которой идёт поиск шаблона
	var $tDirName='template';
	
	# имя загружаемого по дефолту шаблона без расширения
	var $template='index';
	
	# Абсолютный путь к папке с движка (для шаблонов)
	var $engineDir='/';
	
	# абсолютный путь к корню (для шаблонов)
	var $rootDir='/';
	
	
	# имя директории в которой идёт поиск шаблона
	var $templatePath='';
	
	# переменная определяет тип просмотра сайта
	var $viewmode='view';
	
	# пользователь может редактировать страницу
	var $pageeditable=false;

	# Использовать ли шаблонизатор
	var $compile=true;
	

	function view($setviewname='setview') {
		$this->rootDir = substr(root,strlen(hostRoot));
		$this->engineDir = substr(engine,strlen(hostRoot)).'/';
		# Windows hack
		$this->engineDir = str_replace("\\","/",$this->engineDir);
		$this->path=path;
		if (isset($_GET[$setviewname])) {
			$this->viewmode = $_GET[$setviewname];
			setcookie($setviewname, $this->viewmode, time()+360000,'/');
			if (strstr(path,'admin')) $this->Redirect('/');
		} elseif (isset($_COOKIE[$setviewname])) $this->viewmode = $_COOKIE[$setviewname];
		$this->getTemplatePath();
	}
	
	/**
	 * Задаёт имя шаблона
	 *
	 * @param string $name
	 */
	function setTemplate($name) {
		$this->template=$name;
	}
	
	
	/**
	 * Выполнить файл в переменную
	 * @param string $path
	 * @return text текст который вернул файл
	 */
	 function getContent($path,$other=false) {
		if (file_exists(root.'/'.$path)) {
			global $config,$db,$objects; // делаем доступным из подключаемого файла
			# Подключение всех объектов
			foreach ($objects as $obj) {
				global $$obj;
			}
			
			ob_start();
			$this->file=$path;
			chdir(root.'/'.dirname($path));
			include(root.'/'.$path);
			$content=ob_get_contents(); 
			ob_end_clean();
			return $content;	
		} elseif (!$other) {
			$path=substr($path,0,strrpos($path,'.'));
			$out = $this->getContent($path.'.php',true);	
			if ($out) return $out;
			else $out = $this->getContent($path.'.html',true);
			if ($out) return $out;
			else $out = $this->getContent($path.'.htm',true);
			if ($out) return $out;
			else return $this->getContent(content_missing($path));
		} else {return false;}
	}
	
	/**
	 * выгружает контент
	 * @param string $path
	 * @return
	 */	
	 function setContent($path) {
		$this->path = dirname($path);
		$this->content = $this->getContent($path);
	}
	
	/**
	 * Возвращает адрес папки с шаблоном
	 *
	 * @return string
	 */
	function getTemplatePath() {
		if (empty($this->templatePath)) {
			$way=$this->path;
			$pos = strrpos($way,'/');
			while (!file_exists(root.$way.'/'.$this->tDirName) && $pos!==false) {
				$way=substr($way,0,$pos);
				$pos = strrpos($way,'/');
			}
			if ($way=='//' || $way=='/') $way='';
			$this->dir = $this->rootDir.$way.'/'.$this->tDirName.'/';
			$this->templatePath = root.$way.'/'.$this->tDirName.'/';
			if (file_exists($this->templatePath.$this->template.'.php')) {
				$this->template=$this->template.'.php';
				# для этого расширения компилятор не используем
				$this->compile=false;
			} else {
				if (file_exists($this->templatePath.$this->template.'.htm'))
					$this->template=$this->template.'.htm';
				else
					$this->template=$this->template.'.html';
			}
		}
		return $this->templatePath;
	}

	/**
	 * Рендеринг страницы
	 */	
	function Render($path = '') {
		global $config,$db;
		if (empty($path))
			$path = $this->getTemplatePath().$this->template;
		else
			$path = $this->getTemplatePath().$path;
		if (empty($this->template)) {echo $this->content; return true;}
		if ($this->compile) {
			$tmp_path=engine.'/tmp/template_'.md5($path).'.php';
			if (file_exists($tmp_path))
				$tmp_change=filemtime($tmp_path);
			$tpl_change=filemtime($path);
			if ($tpl_change!=$tmp_change) {
				include_once 'tcompiler.class.php';
				$compiler = new tcompiler($this,engine.'/tmp');
				file::putContent($compiler->compile(file::getContent($path)),$tmp_path);
				touch($tmp_path,$tpl_change);
			}
			$path=$tmp_path;
		} else {
			
		}
		include $path;
	}



	/**
	 * Отображение произвольной страницы
	 *
	 * @param string $path
	 */
	function Show($path,$return=false) {
		global $db,$config;
		if ($return) {
			ob_start();
			include(root.'/'.$path);
			$content=ob_get_contents(); 
			ob_end_clean();
			return $content;
		}		
		include(root.'/'.$path);
	}
	
	/**
	 * Выведет на странице нужный шаблон
	 *
	 * @param string $path
	 */
	function Get($path) {
		include $this->getTemplatePath().$path;
	}
	
	/**
	 * Вставляет в шаблон скрипт с указанным именем
	 *
	 * @param string $name
	 */
	function Script($name) {
		echo "<script type=\"text/javascript\" src=\"".$this->engineDir."js/".strtolower($name).".js\"></script>\n";
	}
	
	/**
	 * Вставляет в шаблон стили с указанным именем
	 *
	 * @param string $name
	 */
	function Style($name) {
		echo "<link href=\"".$this->engineDir."css/".$name.".css\" type=\"text/css\" rel=\"stylesheet\" />\n";
	}
	
	/**
	 * Переадресация
	 *
	 * @param string $path
	 */
	 function Redirect($path) {
		if (!strstr($path,'http:') && $path[0]!='/') $path = '/'.$path;
		header('Location: '.$this->rootDir.$path);
		die();
	}
	
	/**
	 * Выводит контент страницы
	 *
	 */
	function content() {
	}
}
?>